package cn.itcalvin.sncoal.cth.service;

import cn.itcalvin.sncoal.cth.pojo.common.ReqLong;
import cn.itcalvin.sncoal.cth.pojo.common.RespTotalRow;
import cn.itcalvin.sncoal.cth.pojo.req.pf.*;
import cn.itcalvin.sncoal.cth.pojo.response.pf.*;
import cn.itcalvin.vo.Message;
import cn.itcalvin.vo.MessageExt;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;

public interface InfoPfService{

    /**
     * 根据条件获取评分记录
     * @param reqPfList
     * @return
     */
    Message<List<RespPfList>> list(ReqPfList reqPfList);

    /**
     * 评分任务详情
     * @param reqLong
     * @return
     */
    Message<RespPfDetails> details(ReqLong reqLong);

    /**
     * 新增任务
     * @param reqPfAdd
     * @return
     */
    Message add(ReqPfAdd reqPfAdd);

    /**
     * 修改
     * @param reqPfModify
     * @return
     */
    Message modify(ReqPfModify reqPfModify);

    /**
     * 删除
     * @param reqLong
     * @return
     */
    Message delete(ReqLong reqLong);

    /**
     * 评分系统列表
     * @param reqLong
     * @return
     */
    MessageExt<List<RespPfListSystem>, RespTotalRow> systemList(ReqLong reqLong);

    /**
     * 某次评分的某个系统下的指标列表
     * @param reqPfItemList
     * @return
     */
    Message<List<RespPfItemList>> pfItemList(ReqPfItemList reqPfItemList);


    /**
     * 判断某个系统是否已经提交
     * type=1 自评  type=2 核验
     * @param reqPfItemList
     * @return
     */
    Message<RespPfItemState> pfItemListState(ReqPfItemList reqPfItemList, Integer type);

    /**
     * 保存指标填写---核验和自评共用一个接口
     * @param reqPfSystemZbDetailsAdd
     * @return
     */
    Message savePfZbDetails(ReqPfSystemZbDetailsAdd reqPfSystemZbDetailsAdd);

    /**
     * 评分系统提交
     * @param reqCommitPfSystem
     * @return
     */
    Message commitPfSystem(ReqCommitPfSystem reqCommitPfSystem);

    /**
     * 复制评分任务
     * @param reqPfCopy
     * @return
     */
    Message copyPfTask(ReqPfCopy reqPfCopy);

    /**
     * 上传整改计划文件
     * @param reqUploadZgjh
     * @return
     */
    Message uploadZgjh(ReqUploadZgjh reqUploadZgjh);

    /**
     * 导出某任务各系统得分情况
     * @param pfId
     */
    void exportPfById(Long pfId, HttpServletResponse response) throws IOException;

    /**
     * 批量提交-自评或者核验
     * @param reqBatchCommit
     * @return
     */
    Message batchCommit(ReqBatchCommit reqBatchCommit);

    /**
     * 批量驳回-自评或者核验
     * @param reqBatchCommit
     * @return
     */
    Message batchBhCommit(ReqBatchCommit reqBatchCommit);

    /**
     * 提交任务-自评或者核验
     * @param reqBatchCommit
     * @return
     */
    Message batchTaskCommit(ReqBatchCommit reqBatchCommit);
}
